package br.com.projeto.persistence;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import br.com.projeto.entity.AnuncioVO;
import br.com.projeto.entity.CarroVO;
import br.com.projeto.entity.EnderecoVO;
import br.com.projeto.entity.ImagemVO;
import br.com.projeto.entity.PagamentoVO;
import br.com.projeto.entity.UsuarioFisicoVO;
import br.com.projeto.entity.UsuarioJuridicoVO;
import br.com.projeto.entity.UsuarioVO;
import br.com.projeto.util.ProjetoUtils;

import com.acol.util.CollectionsUtil;
import com.acol.util.IntegerUtils;
import com.acol.util.StringUtil;

public class AnuncioDAO extends BaseDAO{
	
	/**
	 * 
	 * @param anuncioVO
	 * @return
	 */
	public Integer inserirAnuncio(AnuncioVO anuncioVO){
		Integer id = null;
		try{
		open();
			stmt = con.prepareStatement("INSERT INTO anuncio(seq_anuncio,seq_usuario,titulo,descricao,dt_cadastro) " +
											"	VALUES(null,?,upper(?),?,?)");
	        stmt.setInt(1, anuncioVO.getUsuarioVO().getSeqUsuario());
	        stmt.setString(2, anuncioVO.getTitulo());
	        stmt.setString(3, anuncioVO.getDescricao());
	        stmt.setString(4, ProjetoUtils.getData(new Date()));
	        stmt.executeUpdate();
	        stmt.close();
	        //Recuperar o seq
	        stmt = con.prepareStatement("SELECT LAST_INSERT_ID() id from dual");
	        rs = stmt.executeQuery();
	        if(rs.next()){
	        	id = rs.getInt("id");
	        }
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em inserirAnuncio:"+e.getMessage());
		}
		return id;
	}
	
	/**
	 * 
	 * @param anuncioVO
	 */
	public void alterarAnuncio(AnuncioVO anuncioVO){
		try{
		open();
			stmt = con.prepareStatement(" UPDATE anuncio " +
										" SET 	titulo = upper(?)," +
										"	 	descricao= ?" +
										" WHERE 	seq_anuncio= ?");
	        stmt.setString(1, anuncioVO.getTitulo());
	        stmt.setString(2, anuncioVO.getDescricao());
	        stmt.setInt(3, anuncioVO.getSeqAnuncio());
	        stmt.executeUpdate();
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em alterarAnuncio:"+e.getMessage());
		}
	}
	
	/**
	 * 
	 * @param anuncioVO
	 */
	public void deletarAnuncio(AnuncioVO anuncioVO){
		try{
		open();
			stmt = con.prepareStatement("DELETE FROM anuncio WHERE seq_anuncio= "+anuncioVO.getSeqAnuncio());
	        stmt.executeUpdate();
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em deletarAnuncio:"+e.getMessage());
		}
	}
	
	/**
	 * 
	 * @param carroVO
	 */
	public void inserirCarro(CarroVO carroVO){
		try{
			open();
			stmt = con.prepareStatement("INSERT INTO carro(seq_anuncio,marca,modelo,cambio,combustivel,quilometragem,preco,flag_uso,ano) " +
										"	VALUES(?,upper(?),upper(?),upper(?),upper(?),?,?,?,?)");
	        stmt.setInt(1, carroVO.getSeqCarro());
	        stmt.setString(2, carroVO.getMarca());
	        stmt.setString(3, carroVO.getModelo());
	        stmt.setString(4, carroVO.getCambio());
	        stmt.setString(5, carroVO.getCombustivel());
	        stmt.setString(6, carroVO.getQuilometragem());
	        if(carroVO.getPreco() == null){
	        	 stmt.setString(7, null);
	        }else{
	        	 stmt.setDouble(7, carroVO.getPreco());
	        }
	        stmt.setString(8, carroVO.getFlagUso().toString());
	        stmt.setString(9, ProjetoUtils.getData(carroVO.getAno()));
	        stmt.executeUpdate();
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em inserirCarro:"+e.getMessage());
		}
	}
	
	/**
	 * 
	 * @param carroVO
	 */
	public void alterarCarro(CarroVO carroVO){
		try{
			open();
			stmt = con.prepareStatement(" UPDATE carro " +
										" SET	marca = upper(?), " +
										"		modelo = upper(?), " +
										"		cambio = upper(?), " +
										"		combustivel = upper(?), " +
										"		quilometragem = ?, " +
										"		preco = ?, " +
										"		flag_uso = ?, " +
										"		ano = ? " +
										" WHERE seq_anuncio=?");
	        stmt.setString(1, carroVO.getMarca());
	        stmt.setString(2, carroVO.getModelo());
	        stmt.setString(3, carroVO.getCambio());
	        stmt.setString(4, carroVO.getCombustivel());
	        stmt.setString(5, carroVO.getQuilometragem());
	        stmt.setDouble(6, carroVO.getPreco());
	        stmt.setString(7, carroVO.getFlagUso().toString());
	        stmt.setString(8, ProjetoUtils.getData(carroVO.getAno()));
	        stmt.setInt(9, carroVO.getSeqCarro());
	        stmt.executeUpdate();
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em alterarCarro:"+e.getMessage());
		}
	}
	
	/**
	 * 
	 * @param pagamentoVO
	 */
	public void inserirPagamento(PagamentoVO pagamentoVO){
		try{
			open();
			stmt = con.prepareStatement("INSERT INTO pagamento(seq_anuncio,valor,anexo,dt_pagamento_realizado,tipo_pagamento) " +
										"	VALUES(?,?,?,?,upper(?))");
	        stmt.setInt(1, pagamentoVO.getSeqPagamento());
	        stmt.setDouble(2, pagamentoVO.getValor());
	        if(pagamentoVO.getAnexo() != null){
	        	stmt.setBytes(3, pagamentoVO.getAnexo());
	        }else{
	        	stmt.setString(3, null);
	        }
	        stmt.setString(4, ProjetoUtils.getDataFormatada(pagamentoVO.getDtPagamentoRealizado(),"yyyy-MM-dd"));
	        stmt.setString(5, pagamentoVO.getTipoPagamento());
	        stmt.executeUpdate();
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em inserirPagamento:"+e.getMessage());
		}
	}
	
	/**
	 * 
	 * @param pagamentoVO
	 */
	public void alterarPagamento(PagamentoVO pagamentoVO){
		try{
			open();
			stmt = con.prepareStatement("UPDATE pagamento" +
										"SET	valor = ?," +
										"		dt_pagamento_realizado = ?," +
										"		tipo_pagamento = upper(?)," +
										"WHERE seq_anuncio = ?");
	        stmt.setDouble(1, pagamentoVO.getValor());
	        stmt.setString(2, ProjetoUtils.getDataFormatada(pagamentoVO.getDtPagamentoRealizado(),"yyyy-MM-dd"));
	        stmt.setString(3, pagamentoVO.getTipoPagamento());
	        stmt.setInt(4, pagamentoVO.getSeqPagamento());
	        stmt.executeUpdate();
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em alterarPagamento:"+e.getMessage());
		}
	}
	
	/**
	 * 
	 * @param imagemVO
	 */
	public void inserirImagem(ImagemVO imagemVO){
		try{
			open();
			stmt = con.prepareStatement("INSERT INTO imagem(seq_imagem,seq_anuncio,imagem) " +
										"	VALUES(null,?,?)");
	        stmt.setInt(1, imagemVO.getSeqAnuncio());
	        if(imagemVO.getImagem() != null){
	        	stmt.setBytes(2, imagemVO.getImagem());
	        }else{
	        	stmt.setBytes(2, null);
	        }
	        stmt.executeUpdate();
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em inserirPagamento:"+e.getMessage());
		}
	}
	
	public void deletarImagem(ImagemVO imagemVO){
		try{
			open();
			stmt = con.prepareStatement("DELETE FROM imagem WHERE seq_imagem = "+imagemVO.getSeqImagem());
	        stmt.executeUpdate();
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em deletarImagem:"+e.getMessage());
		}
	}
	
	/**
	 * 
	 * @param imagemVO
	 * @return
	 */
	public ImagemVO buscarImagem(ImagemVO imagemVO){
		try{
			open();
			stmt = con.prepareStatement(" SELECT seq_imagem,seq_anuncio,imagem " +
										" FROM imagem " +
										" WHERE 	seq_imagem= " + imagemVO.getSeqImagem() +
										" AND 	seq_anuncio= "+imagemVO.getSeqAnuncio());
	        rs = stmt.executeQuery();
	        if(rs.next()){
	        	imagemVO.setImagem(rs.getBytes("imagem"));
	        }
	        stmt.close();
	        close();
		}catch (Exception e) {
			System.out.println("Erro em buscarImagem:"+e.getMessage());
		}
		return imagemVO;
	}
	
	/**
	 * 
	 * @param anuncioVO
	 * @param status
	 * @return
	 */
	private String getSqlBuscarTodosAnuncios(AnuncioVO anuncioVO, String status){
		StringBuffer sql = new StringBuffer();
		sql.append(" SELECT 	a.seq_anuncio,a.seq_usuario,a.titulo,a.descricao,a.dt_cadastro, \n");
		sql.append("			c.marca,c.modelo,c.cambio,c.combustivel,c.quilometragem,c.preco,c.flag_uso,c.ano, \n");
		sql.append("			p.valor,p.anexo,p.dt_pagamento_realizado,p.tipo_pagamento, \n");
		sql.append("			i.seq_imagem,i.imagem, \n");
		sql.append("			u.seq_usuario, u.login, u.senha, u.email, u.tipo_usuario, u.tipo_acesso, \n"); 
		sql.append("			uf.cpf, uf.nome,  \n");
		sql.append("			uj.cnpj, uj.razao_social, uj.inscricao_estadual,  \n"); 
		sql.append("			e.logradouro, e.numero, e.complemento, e.bairro, e.cidade, e.estado, e.cep, \n");
		sql.append("			e.tel_comercial, e.tel_residencial, e.tel_celular \n");
		sql.append(" FROM	anuncio a  \n");
		sql.append(" LEFT JOIN carro c ON (a.seq_anuncio = c.seq_anuncio)  \n");
		sql.append(" LEFT JOIN pagamento p ON (a.seq_anuncio = p.seq_anuncio) \n");
		sql.append(" LEFT JOIN imagem i ON (a.seq_anuncio = i.seq_anuncio) \n");
		sql.append(" LEFT JOIN usuario u 	LEFT JOIN usuario_fisico uf ON (u.seq_usuario = uf.seq_usuario)  \n");
		sql.append(" 						LEFT JOIN usuario_juridico uj ON (u.seq_usuario = uj.seq_usuario) \n");
		sql.append(" 						LEFT JOIN endereco e ON (u.seq_usuario = e.seq_usuario) ON (a.seq_usuario = u.seq_usuario) \n");
		sql.append(" WHERE 1=1 ");
		if(!IntegerUtils.empty(anuncioVO.getSeqAnuncio())){
			sql.append(" AND a.seq_anuncio ="+anuncioVO.getSeqAnuncio());
		}
		if(anuncioVO.getUsuarioVO() != null){
			if(!IntegerUtils.empty(anuncioVO.getUsuarioVO().getSeqUsuario())){
				sql.append(" AND a.seq_usuario ="+anuncioVO.getUsuarioVO().getSeqUsuario());
			}
		}
		if(!StringUtil.empty(anuncioVO.getTitulo())){
			sql.append(" AND a.titulo like '%"+anuncioVO.getTitulo()+"%'");
		}
		if(!StringUtil.empty(anuncioVO.getCarroVO().getCambio())){
			sql.append(" AND c.cambio like '%"+anuncioVO.getCarroVO().getCambio()+"%'");
		}
		if(!StringUtil.empty(anuncioVO.getCarroVO().getCombustivel())){
			sql.append(" AND c.combustivel like '%"+anuncioVO.getCarroVO().getCombustivel()+"%'");
		}
		if(!StringUtil.empty(anuncioVO.getCarroVO().getMarca())){
			sql.append(" AND c.marca like '%"+anuncioVO.getCarroVO().getMarca()+"%'");
		}
		if(!StringUtil.empty(anuncioVO.getCarroVO().getModelo())){
			sql.append(" AND c.modelo like '%"+anuncioVO.getCarroVO().getModelo()+"%'");
		}
		if(anuncioVO.getCarroVO().getAno() != null){
			if(!StringUtil.empty(anuncioVO.getCarroVO().getAno().toString())){
				sql.append(" AND c.ano like '%"+ProjetoUtils.getData(anuncioVO.getCarroVO().getAno())+"%'");
			}
		}
		if(!IntegerUtils.empty(anuncioVO.getCarroVO().getFlagUso())){
			sql.append(" AND c.flag_uso = '"+anuncioVO.getCarroVO().getFlagUso()+"'");
		}
		if(status != null){
			if(status.equals("ATIVO")){
				sql.append(" AND p.dt_pagamento_realizado IS NOT NULL");
			}
			if(status.equals("PENDENTE")){
				sql.append(" AND p.dt_pagamento_realizado IS NULL");
			}
		}
		return sql.toString();
	}
	
	/**
	 * 
	 * @param anuncioVO
	 * @param status
	 * @return
	 */
    public List<AnuncioVO> buscarTodosAnuncios(AnuncioVO anuncioVO, String status){
    	List<AnuncioVO> lista = new ArrayList<AnuncioVO>();
    	try{
	    	open();
			stmt = con.prepareStatement(getSqlBuscarTodosAnuncios(anuncioVO,status));
	        rs = stmt.executeQuery();
	        Integer seqAnuncioAnterior = 0;
	        AnuncioVO anuncio = null;
	        while(rs.next()){
	        	if(seqAnuncioAnterior.intValue() != Integer.valueOf(rs.getString("seq_anuncio")).intValue()){
	        		anuncio = new AnuncioVO();
	        		anuncio.setImagens(new ArrayList<ImagemVO>());
	        		anuncio.setDescricao(rs.getString("descricao"));
	        		anuncio.setDtCadastro(rs.getDate("dt_cadastro"));
	        		anuncio.setSeqAnuncio(rs.getInt("seq_anuncio"));
	        		anuncio.setTitulo(rs.getString("titulo"));	        		
	        		UsuarioVO usuario = new UsuarioVO();
	            	usuario.setSeqUsuario(Integer.valueOf(rs.getString("seq_usuario")));
	            	usuario.setLogin(rs.getString("login"));
	            	usuario.setSenha(rs.getString("senha"));
	            	usuario.setEmail(rs.getString("email"));
	            	usuario.setTipoUsuario(rs.getString("tipo_usuario"));
	            	usuario.setTipoAcesso(rs.getString("tipo_acesso"));
	            	if(usuario.getTipoUsuario().equals("1")){
	            		usuario.setUsuarioFisicoVO(new UsuarioFisicoVO());
	            		usuario.getUsuarioFisicoVO().setCpf(rs.getString("cpf"));
	            		usuario.getUsuarioFisicoVO().setNome(rs.getString("nome"));
	            		usuario.getUsuarioFisicoVO().setSeqUsuario(usuario.getSeqUsuario());
	            	}else if(usuario.getTipoUsuario().equals("2")){
	            		usuario.setUsuarioJuridicoVO(new UsuarioJuridicoVO());
	            		usuario.getUsuarioJuridicoVO().setCnpj(rs.getString("cnpj"));
	            		usuario.getUsuarioJuridicoVO().setInscricaoEstadual(rs.getString("inscricao_estadual"));
	            		usuario.getUsuarioJuridicoVO().setRazaoSocial(rs.getString("razao_social"));
	            		usuario.getUsuarioJuridicoVO().setSeqUsuario(usuario.getSeqUsuario());
	            	}
	            	usuario.setEnderecoVO(new EnderecoVO());
	            	usuario.getEnderecoVO().setBairro(rs.getString("bairro"));
	            	usuario.getEnderecoVO().setCep(rs.getString("cep"));
	            	usuario.getEnderecoVO().setCidade(rs.getString("cidade"));
	            	usuario.getEnderecoVO().setComplemento(rs.getString("complemento"));
	            	usuario.getEnderecoVO().setEstado(rs.getString("estado"));
	            	usuario.getEnderecoVO().setLogradouro(rs.getString("logradouro"));
	            	usuario.getEnderecoVO().setNumero(rs.getString("numero"));
	            	usuario.getEnderecoVO().setTelCelular(rs.getString("tel_celular"));
	            	usuario.getEnderecoVO().setTelComercial(rs.getString("tel_comercial"));
	            	usuario.getEnderecoVO().setTelResidencial(rs.getString("tel_residencial"));
	            	usuario.getEnderecoVO().setSeqEndereco(usuario.getSeqUsuario());
	            	anuncio.setUsuarioVO(usuario);	        		
	        		anuncio.setCarroVO(new CarroVO());
	        		anuncio.getCarroVO().setAno(rs.getDate("ano"));
	        		anuncio.getCarroVO().setCambio(rs.getString("cambio"));
	        		anuncio.getCarroVO().setCombustivel(rs.getString("combustivel"));
	        		anuncio.getCarroVO().setFlagUso(rs.getInt("flag_uso"));
	        		anuncio.getCarroVO().setMarca(rs.getString("marca"));
	        		anuncio.getCarroVO().setModelo(rs.getString("modelo"));
	        		anuncio.getCarroVO().setPreco(rs.getDouble("preco"));
	        		anuncio.getCarroVO().setQuilometragem(rs.getString("quilometragem"));
	        		anuncio.getCarroVO().setSeqCarro(rs.getInt("seq_anuncio"));
	        		anuncio.setPagamentoVO(new PagamentoVO());
	        		anuncio.getPagamentoVO().setAnexo(rs.getBytes("anexo"));
	        		anuncio.getPagamentoVO().setDtPagamentoRealizado(rs.getDate("dt_pagamento_realizado"));
	        		anuncio.getPagamentoVO().setSeqPagamento(rs.getInt("seq_anuncio"));
	        		anuncio.getPagamentoVO().setTipoPagamento(rs.getString("tipo_pagamento"));
	        		anuncio.getPagamentoVO().setValor(rs.getDouble("valor"));
	        		if(rs.getInt("seq_imagem") != 0){
			        	ImagemVO img = new ImagemVO();
		        		img.setSeqAnuncio(rs.getInt("seq_anuncio"));
		        		img.setSeqImagem(rs.getInt("seq_imagem"));
		        		img.setImagem(rs.getBytes("imagem"));
		        		anuncio.getImagens().add(img);
		        	}
	        		lista.add(anuncio);
	        	}else if(rs.getInt("seq_imagem") != 0){
	        			anuncio = (AnuncioVO)CollectionsUtil.find(lista, "seqAnuncio", seqAnuncioAnterior);
			        	ImagemVO img = new ImagemVO();
		        		img.setSeqAnuncio(rs.getInt("seq_anuncio"));
		        		img.setSeqImagem(rs.getInt("seq_imagem"));
		        		img.setImagem(rs.getBytes("imagem"));
		        		anuncio.getImagens().add(img);
		        	}
	    		seqAnuncioAnterior = Integer.valueOf(rs.getString("seq_anuncio"));
	        }
	        stmt.close();
	        close();
    	}catch(Exception e){
    		System.out.println("Erro em buscarTodosAnuncios"+e.getMessage());
    	}
        return lista;
    }

    /**
     * 
     * @param anuncioVO
     * @return
     */
    private String getSqlBuscarAnuncio(AnuncioVO anuncioVO){
		StringBuffer sql = new StringBuffer();
		sql.append(" SELECT 	a.seq_anuncio,a.seq_usuario,a.titulo,a.descricao,a.dt_cadastro, \n");
		sql.append("			c.marca,c.modelo,c.cambio,c.combustivel,c.quilometragem,c.preco,c.flag_uso,c.ano, \n");
		sql.append("			p.valor,p.anexo,p.dt_pagamento_realizado,p.tipo_pagamento, \n");
		sql.append("			i.seq_imagem,i.imagem, \n");
		sql.append("			u.seq_usuario, u.login, u.senha, u.email, u.tipo_usuario, u.tipo_acesso, \n"); 
		sql.append("			uf.cpf, uf.nome,  \n");
		sql.append("			uj.cnpj, uj.razao_social, uj.inscricao_estadual,  \n"); 
		sql.append("			e.logradouro, e.numero, e.complemento, e.bairro, e.cidade, e.estado, e.cep, \n");
		sql.append("			e.tel_comercial, e.tel_residencial, e.tel_celular \n");
		sql.append(" FROM	anuncio a  \n");
		sql.append(" LEFT JOIN carro c ON (a.seq_anuncio = c.seq_anuncio)  \n");
		sql.append(" LEFT JOIN pagamento p ON (a.seq_anuncio = p.seq_anuncio) \n");
		sql.append(" LEFT JOIN imagem i ON (a.seq_anuncio = i.seq_anuncio) \n");
		sql.append(" LEFT JOIN usuario u 	LEFT JOIN usuario_fisico uf ON (u.seq_usuario = uf.seq_usuario)  \n");
		sql.append(" 						LEFT JOIN usuario_juridico uj ON (u.seq_usuario = uj.seq_usuario) \n");
		sql.append(" 						LEFT JOIN endereco e ON (u.seq_usuario = e.seq_usuario) ON (a.seq_usuario = u.seq_usuario) \n");
		sql.append(" WHERE 1=1 ");
		if(!IntegerUtils.empty(anuncioVO.getSeqAnuncio())){
			sql.append(" AND a.seq_anuncio ="+anuncioVO.getSeqAnuncio());
		}else{
			if(anuncioVO.getUsuarioVO() != null){
				if(!IntegerUtils.empty(anuncioVO.getUsuarioVO().getSeqUsuario())){
					sql.append(" AND a.seq_usuario ="+anuncioVO.getUsuarioVO().getSeqUsuario());
				}
			}
			if(!StringUtil.empty(anuncioVO.getTitulo())){
				sql.append(" AND a.titulo like upper('%"+anuncioVO.getTitulo()+"%')");
			}
			if(!StringUtil.empty(anuncioVO.getCarroVO().getCambio())){
				sql.append(" AND c.cambio like upper('%"+anuncioVO.getCarroVO().getCambio()+"%')");
			}
			if(!StringUtil.empty(anuncioVO.getCarroVO().getCombustivel())){
				sql.append(" AND c.combustivel like upper('%"+anuncioVO.getCarroVO().getCombustivel()+"%')");
			}
			if(!StringUtil.empty(anuncioVO.getCarroVO().getMarca())){
				sql.append(" AND c.marca like upper('%"+anuncioVO.getCarroVO().getMarca()+"%')");
			}
			if(!StringUtil.empty(anuncioVO.getCarroVO().getModelo())){
				sql.append(" AND c.modelo like upper('%"+anuncioVO.getCarroVO().getModelo()+"%')");
			}
			if(anuncioVO.getCarroVO().getAno() != null){
				if(!StringUtil.empty(anuncioVO.getCarroVO().getAno().toString())){
					sql.append(" AND c.ano like '%"+ProjetoUtils.getData(anuncioVO.getCarroVO().getAno())+"%'");
				}
			}
			if(!IntegerUtils.empty(anuncioVO.getCarroVO().getFlagUso())){
				sql.append(" AND c.flag_uso = '"+anuncioVO.getCarroVO().getFlagUso()+"'");
			}
		}
		return sql.toString();
	}
    
    /**
     * 
     * @param anuncioVO
     * @return
     */
    public AnuncioVO buscarAnuncio(AnuncioVO anuncioVO){
    	AnuncioVO anuncio = null;
    	try{
	    	open();
			stmt = con.prepareStatement(getSqlBuscarAnuncio(anuncioVO));
	        rs = stmt.executeQuery();
	        while(rs.next()){
	        	if(anuncio == null){
	        		anuncio = new AnuncioVO();
	        		anuncio.setImagens(new ArrayList<ImagemVO>());
	        		anuncio.setDescricao(rs.getString("descricao"));
	        		anuncio.setDtCadastro(rs.getDate("dt_cadastro"));
	        		anuncio.setSeqAnuncio(rs.getInt("seq_anuncio"));
	        		anuncio.setTitulo(rs.getString("titulo"));
	        		UsuarioVO usuario = new UsuarioVO();
	            	usuario.setSeqUsuario(Integer.valueOf(rs.getString("seq_usuario")));
	            	usuario.setLogin(rs.getString("login"));
	            	usuario.setSenha(rs.getString("senha"));
	            	usuario.setEmail(rs.getString("email"));
	            	usuario.setTipoUsuario(rs.getString("tipo_usuario"));
	            	usuario.setTipoAcesso(rs.getString("tipo_acesso"));
	            	if(usuario.getTipoUsuario().equals("1")){
	            		usuario.setUsuarioFisicoVO(new UsuarioFisicoVO());
	            		usuario.getUsuarioFisicoVO().setCpf(rs.getString("cpf"));
	            		usuario.getUsuarioFisicoVO().setNome(rs.getString("nome"));
	            		usuario.getUsuarioFisicoVO().setSeqUsuario(usuario.getSeqUsuario());
	            	}else if(usuario.getTipoUsuario().equals("2")){
	            		usuario.setUsuarioJuridicoVO(new UsuarioJuridicoVO());
	            		usuario.getUsuarioJuridicoVO().setCnpj(rs.getString("cnpj"));
	            		usuario.getUsuarioJuridicoVO().setInscricaoEstadual(rs.getString("inscricao_estadual"));
	            		usuario.getUsuarioJuridicoVO().setRazaoSocial(rs.getString("razao_social"));
	            		usuario.getUsuarioJuridicoVO().setSeqUsuario(usuario.getSeqUsuario());
	            	}
	            	usuario.setEnderecoVO(new EnderecoVO());
	            	usuario.getEnderecoVO().setBairro(rs.getString("bairro"));
	            	usuario.getEnderecoVO().setCep(rs.getString("cep"));
	            	usuario.getEnderecoVO().setCidade(rs.getString("cidade"));
	            	usuario.getEnderecoVO().setComplemento(rs.getString("complemento"));
	            	usuario.getEnderecoVO().setEstado(rs.getString("estado"));
	            	usuario.getEnderecoVO().setLogradouro(rs.getString("logradouro"));
	            	usuario.getEnderecoVO().setNumero(rs.getString("numero"));
	            	usuario.getEnderecoVO().setTelCelular(rs.getString("tel_celular"));
	            	usuario.getEnderecoVO().setTelComercial(rs.getString("tel_comercial"));
	            	usuario.getEnderecoVO().setTelResidencial(rs.getString("tel_residencial"));
	            	usuario.getEnderecoVO().setSeqEndereco(usuario.getSeqUsuario());
	            	anuncio.setUsuarioVO(usuario);	  
	        		anuncio.setCarroVO(new CarroVO());
	        		anuncio.getCarroVO().setAno(rs.getDate("ano"));
	        		anuncio.getCarroVO().setCambio(rs.getString("cambio"));
	        		anuncio.getCarroVO().setCombustivel(rs.getString("combustivel"));
	        		anuncio.getCarroVO().setFlagUso(rs.getInt("flag_uso"));
	        		anuncio.getCarroVO().setMarca(rs.getString("marca"));
	        		anuncio.getCarroVO().setModelo(rs.getString("modelo"));
	        		anuncio.getCarroVO().setPreco(rs.getDouble("preco"));
	        		anuncio.getCarroVO().setQuilometragem(rs.getString("quilometragem"));
	        		anuncio.getCarroVO().setSeqCarro(rs.getInt("seq_anuncio"));
	        		anuncio.setPagamentoVO(new PagamentoVO());
	        		anuncio.getPagamentoVO().setAnexo(rs.getBytes("anexo"));
	        		anuncio.getPagamentoVO().setDtPagamentoRealizado(rs.getDate("dt_pagamento_realizado"));
	        		anuncio.getPagamentoVO().setSeqPagamento(rs.getInt("seq_anuncio"));
	        		anuncio.getPagamentoVO().setTipoPagamento(rs.getString("tipo_pagamento"));
	        		anuncio.getPagamentoVO().setValor(rs.getDouble("valor"));
	        	}
	        	if(rs.getInt("seq_imagem") != 0){
		        	ImagemVO img = new ImagemVO();
	        		img.setSeqAnuncio(rs.getInt("seq_anuncio"));
	        		img.setSeqImagem(rs.getInt("seq_imagem"));
	        		img.setImagem(rs.getBytes("imagem"));
	        		anuncio.getImagens().add(img);
	        	}
	        }
	        stmt.close();
	        close();
    	}catch(Exception e){
    		System.out.println("Erro em buscarAnuncio"+e.getMessage());
    	}
        return anuncio;
    }

}
